package org.csu.controller;

import org.csu.entity.Book;
import org.csu.entity.BookQuery;
import org.csu.service.BookManageService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import org.csu.vo.BaseResponse;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;

/**
 * 图书信息管理控制器
 * 负责接收图书相关的前端请求，转发到业务层处理，返回统一响应结果
 * 核心功能：图书列表查询、详情查询、新增、修改、删除、上架、下架
 */
@Controller(value="bookManageController")
public class BookManageController {
    /**
     * 注入图书管理业务层接口实例（依赖Spring容器自动装配）
     * name属性对应Service实现类的@Service(name="bookManageService")，确保注入正确实例
     */
    @Resource(name="bookManageService")
    private BookManageService bookManageService;
    /**
     * 多条件分页查询图书列表
     * @param query 图书查询条件封装类（含书名、ISBN、作者、状态等查询字段）
     * @param pageNum 页码（前端不传时默认查第1页）
     * @return 页面路径（若为前后端分离，需改为返回ResponseEntity<BaseResponse<PageInfo<Book>>>）
     */
    public String getBookList(BookQuery query, Integer pageNum){
        return bookManageService.getBookList(query, pageNum);
    }
    /**
     * 根据图书ID查询图书详情
     * @param bookId 图书主键ID（必填参数）
     * @return 页面路径（若为前后端分离，需改为返回ResponseEntity<BaseResponse<Book>>）
     */
    public String getBookDetail(Integer bookId){
        return bookManageService.getBookDetail(bookId);
    }
    /**
     * 新增图书（含封面图片上传）
     * @param book 图书基本信息（前端传参需与Book实体字段名一致）
     * @param coverFile 图书封面图片文件（前端表单字段名需为"coverFile"）
     * @return 统一响应对象（封装新增后的图书完整信息）
     */
    public ResponseEntity<BaseResponse<Book>> addBook(Book book, MultipartFile coverFile){
        return bookManageService.addBook(book, coverFile);
    }
    /**
     * 更新图书基本信息（不含封面修改，若需修改封面需单独加接口）
     * @param book 待更新的图书信息（必须包含bookId主键）
     * @return 统一响应对象（封装操作成功/失败状态）
     */
    public ResponseEntity<BaseResponse<Boolean>> updateBook(Book book){
        return bookManageService.updateBook(book);
    }
    /**
     * 逻辑删除图书（更新图书状态为"已删除"，不物理删除数据）
     * @param bookId 图书主键ID（必填参数）
     * @return 统一响应对象（封装操作成功/失败状态）
     */
    public ResponseEntity<BaseResponse<Boolean>> deleteBook(Integer bookId){
        return bookManageService.deleteBook(bookId);
    }
    /**
     * 图书上架（更新图书状态为"可借阅"）
     * @param bookId 图书主键ID（必填参数）
     * @return 统一响应对象（封装操作成功/失败状态）
     */
    public ResponseEntity<BaseResponse<Boolean>> shelveBook(Integer bookId){
        return bookManageService.shelveBook(bookId);
    }
    /**
     * 图书下架（更新图书状态为"已下架"）
     * @param bookId 图书主键ID（必填参数）
     * @return 统一响应对象（封装操作成功/失败状态）
     */
    public ResponseEntity<BaseResponse<Boolean>> unshelveBook(Integer bookId){
        return bookManageService.unshelveBook(bookId);
    }
}
